WordPress 為了使管理介面更容易被建立,並且確保安全和一致性 提供了兩個核心 API 給開發者使用,分別是設置 API 和選項 API。設置 API 被用來提供了一種創建選單和管理選單資料。選項 API 則是我們提供一種簡單的 key-value 方式來管理設置資料。
WordPress 2.7 之後增加的設置 API 可以讓我們半自動地管理含有設置表單的後台頁面,讓我們自定義設置頁面。讓我們可以輕輕鬆鬆的開發設置頁面。也就是說,我們使用 API 生成介面的元素後,可以確保我們的自定義設置頁面和WordPress 其他的管理介面一致,不會說每個外掛有每個不同的介面,這樣使用外掛的時候肯定很混亂!
如果今天我們創建了自己的設置頁面,WordPress 如果更新了,可能就會破壞我們的自定義設置,所以我們應該使用由 WordPress 核心提供的設置 API 來修改設置頁面。再來,使用 WordPress 設置 API,最直接的好處是,這隻 API 在底層默默的為我們做了很多工作,比如說可以讓我們獲得額外的安全措施、或者是自動為我們清理數據,我們可以省很多工。
前面介紹了這麼多好處,不如來親自試看看設置 API 吧!
我們可以使用 register_setting() 來註冊一個新的設置。此函式會協助我們在資料表({$wpdb->prefix}_options)中插入一條新的記錄。
register_setting(
string $option_group,
string $option_name,
callable $sanitize_callback = ''
);
另外,我們可以使用 add_settings_section() 在現有設置頁面上添加新章節。
add_settings_section(
string $id,
string $title,
callable $callback,
string $page
);
也可以使用 add_settings_field() 將字串新增到現有的章節上面。
章節是我們在 WordPress 設置頁面上看到的帶有同標題的設置群組。在外掛中,我們可以直接對著現有的設置頁面添加新章節,而不是創建一個新頁面。一來我們好維護,二來可以降低用戶的學習和使用成本
<?php
function eric_settings_init(){
// 為 eric 頁面註冊一個新的設置
register_setting('eric', 'eric_setting_name');
// 在 eric 頁面上註冊新章節
add_settings_section(
'eric_settings_section',
'Eric Settings Section',
'eric_settings_section_cb',
'reading'
);
// eric 頁面中,在 eric_settings_section 章節上註冊新設置
add_settings_field(
'eric_settings_field',
'Eric Setting',
'eric_settings_field_cb',
'eric',
'eric_settings_section'
);
}
/**
* 註冊 eric_settings_init 到 admin_init action hook 上面
*/
add_action('admin_init', 'eric_settings_init');
/**
* Callback function
*/
// 回傳章節內容
function wporg_settings_section_cb() {
echo '<p>WPOrg Section Introduction.</p>';
}
// 回傳設定欄位
function wporg_settings_field_cb() {
// 取得我們剛剛用 register_setting() 註冊的值
$setting = get_option('eric_setting_name');
// 輸出
?>
<input type=text name=eric_setting_name value=<?php echo isset( $setting ) ? esc_attr( $setting ) : ''; ?>>
<?php
}
剛剛我們用到了 get_option() 函式,這邊說明一下這個函式是做什麼用的,簡單來說就是我們可以用這個函式來獲取我們想要的設置資料。
get_option(
string $option,
mixed $default = false
);
WordPress 1.0 中引入的選項 API 可以讓我們輕鬆的新增、讀取、更新和刪除 WordPress 選項,結合設置 API,我們可以控制設置頁面中的自定義選項。
選項會被存儲在 {$wpdb->prefix}_options 資料表中。
選項可以是單個值或者是陣列的形式存儲在 WordPress 資料表中。
保存為單個值的時候,選項值為單個字符串、整數等。
<?php
// 新增一個選項
add_option('eric_custom_option', 'hello world!');
// 取得選項
$option = get_option('eric_custom_option');
另外一種選項就是,如果我們需要保存大量選項,我們會把這些選項保存為陣列。